package com.bdzl.biz.dao;

import com.bdzl.pub.entity.flow.ActNodeNextDO;
import com.bdzl.pub.entity.loan.OrderCallDO;
import com.bdzl.pub.entity.loan.OrderDO;
import com.bdzl.pub.entity.loan.OrderRelDO;
import com.bdzl.pub.entity.sys.OrgDO;
import com.bdzl.pub.vo.data.UserInfoVO;
import com.bdzl.pub.vo.loan.ContractOnlineSignrecVO;
import com.bdzl.pub.vo.loan.OrderVO;
import com.bdzl.pub.vo.loan.PaymentVO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 融资租赁订单表
 * @author yangyicai
 * @email yangyicai@foxmail.com
 * @date 2021-05-11 15:23:42
 */
public interface OrderDao {

	OrderDO get(String odrNo);

	List<OrderDO> list(Map<String,Object> map);

	int count(Map<String,Object> map);

	int save(OrderDO order);

	int update(OrderDO order);

	int remove(String odr_no);

	int batchRemove(String[] odrNos);

	/**
	 * @Description: TODO 待处理审核列表
	 * @param map
	 * @return: java.util.List<com.bdzl.pub.vo.loan.OrderVO>
	 * @Author: Ming
	 * @Date: 2021/5/19 11:01
	 */
	List<OrderVO> checkList(Map<String,Object> map);
	/**
	 * @Description: TODO 已处理列表
	 * @param map
	 * @return: java.util.List<com.bdzl.pub.vo.loan.OrderVO>
	 * @Author: Ming
	 * @Date: 2021/5/19 11:01
	 */
	List<OrderVO> processedList(Map<String, Object> map);
	/**
	 * @Description: TODO 我的报件
	 * @param map
	 * @return: java.util.List<com.bdzl.pub.vo.loan.OrderVO>
	 * @Author: Ming
	 * @Date: 2021/5/19 11:54
	 */
	List<OrderVO> newsletterList(Map<String, Object> map);
	/**
	* @Description: TODO 补充资料
	* @param odrNo 订单号
	* @return: com.bdzl.pub.vo.loan.OrderVO
	* @Author: Ming
	* @Date: 2021/5/19 19:59
	*/
	OrderVO additionalMaterials(String odrNo);

	/**
	 * @Description: TODO 根据身份证号查询申请人信息
	 * @param conCardId 身份证号
	 * @return: com.bdzl.pub.vo.data.UserInfoVO
	 * @Author: Ming
	 * @Date: 2021/5/19 20:23
	 */
	UserInfoVO applicant(String conCardId);

	/**
	 * @Description: TODO 根据订单号查询挂靠单位
	 * @param odrNo 订单号
	 * @return: com.bdzl.pub.util.param.R
	 * @Author: Ming
	 * @Date: 2021/5/19 20:23
	 */
	OrderCallDO callCompany(String odrNo);
	/**
	 * @Description: TODO 查询联系人
	 * @param relCustUser 申请人id
	 * @param relOdrNo 订单编号
	 * @param relType 关系人类型：Guarantee：担保人 Contact：联系人
	 * @return: com.bdzl.pub.util.param.R
	 * @Author: Ming
	 * @Date: 2021/5/19 20:23
	 */
	List<OrderRelDO> contactPerson(@Param("relOdrNo") String relOdrNo,@Param("relCustUser") Integer relCustUser,@Param("relType") String relType);

	/**
	 * @Author Zhn
	 * @Description //TODO 回款确认列表
	 * @Date 15:45 2021/5/28
	 * @Param [单号，姓名]
	 * @return com.bdzl.pub.entity.sys.OrgDO
	 **/
	List<PaymentVO> paymentList(Map<String,Object> map);

	/**
	 * @Description: TODO 查询电子授权书
	 * @param odrNo  订单号
	 * @param signer 客户姓名
	 * @return: boolean
	 * @Author: Ming
	 * @Date: 2021/5/28 14:19
	 */
	ContractOnlineSignrecVO getContractByUser(@Param("odrNo") String odrNo,@Param("signer") String signer);


	/**
	 * todo 订单统计
	 */
	 List<OrderVO> statisticsOrderList(Map map);
	 Integer statisticsOrderListcount(Map map);

	/**
	 *订单统计，订单总额
	 * @param map
	 * @return {
	 * 融资总额，sumOdrLoanSys
	 * 返佣总额，sumOdrReturnMoney
	 * 奖励总额，sumOdrBonusMoney
	 * 打款总额，sumOdrPayMoney
	 * 利润总额，sumOdrProfitMoney
	 * 平均毛利率，avgOdrGrossRate }
	 */
	Map<String,String> statisticsOrderSumPrice(Map map);


	/**
	 * 订单统计页面
	 * @param map
	 * @return{
	 * 融资总额，sumOdrLoanSys
	 * 放款总额，sumodrPayMoney
	 * 订单数量，orderCount}
	 */
	Map<String, String> statisticsOrderCount(Map map);


	/**
	 * @Description: TODO 根据当前节点和下一步节点获取中间状态值
	 * @param nowId 当前节点id
	 * @param nextId  下一步节点id
	 * @return: com.bdzl.pub.entity.flow.ActNodeNextDO
	 * @Author: Ming
	 * @Date: 2021/5/28 15:40
	 */
	ActNodeNextDO getByNowAndNext(@Param("nowId") Integer nowId,@Param("nextId") Integer nextId);

	/**
	 * @Description: TODO 根据登录用户id 查询角色
	 * @param userId 登录用户id
	 * @return: java.util.List<java.lang.String>
	 * @Author: Ming
	 * @Date: 2021/5/29 13:36
	 */
	List<String> getRoleByUserId(Integer userId);


	/**
	 * @Description: TODO 根据角色id查询可以操作的所有订单状态
	 * @param roleIds 角色id
	 * @return: java.util.List<java.lang.String>
	 * @Author: Ming
	 * @Date: 2021/5/29 14:46
	 */
	List<String> getStatValByRole(@Param("roleIds") List<String> roleIds);

	/**
	 * @Author Zhn
	 * @Description //TODO 获取打款金额
	 * @Date 11:43 2021/5/29
	 * @Param [month,today] 传month = 任意值 获取当前月  传today = 任意值 获取当前日    禁止同时传值
	 * @return com.bdzl.pub.vo.loan.OrderVO
	 **/
	BigDecimal sumOdrPayMoney(Map<String,Object> map);

	/**
	 * @Author Zhn
	 * @Description //TODO 获取融资金额
	 * @Date 11:43 2021/5/29
	 * @Param [month,today] 传month = 任意值 获取当前月  传today = 任意值 获取当前日    禁止同时传值
	 * @return com.bdzl.pub.vo.loan.OrderVO
	 **/
	BigDecimal sumOdrLoanSys(Map<String,Object> map);

}
